import type { Metadata } from 'next'; import { notFound } from 'next/navigation'; import { PageHeader } from '@/components/ui/page-header'; import { Stat } from '@/components/ui/primitives'; import { AssetBrowser } from '@/components/market/asset-browser'; import { Suspense } from 'react'; import { Skeleton } from '@/components/ui/primitives'; import { getSet, getSetStats } from '@/lib/queries/markets'; import { catName, categoryCrumbs } from '@/lib/taxonomy'; import { fmtMoney, fmtNum, fmtRelative } from '@/lib/format'; import type { SP } from '@/lib/search-params'; export const revalidate = 300; export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise { const { slug } = await params; const s = await getSet(slug); if (!s) return { title: 'Set not found' }; return { title: `${s.name} · ${catName(s.categorySlug)} set`, description: `${s.name}${s.releaseYear ? ` (${s.releaseYear})` : ''}: every tracked asset with valuation, sales and listings.` }; } export default async function SetPage({ params, searchParams }: { params: Promise<{ slug: string }>; searchParams: Promise }) { const { slug } = await params; const sp = await searchParams; const set = await getSet(slug); if (!set) notFound(); const stats = await getSetStats(slug); return (
{[ ['Tracked assets', fmtNum(stats.assets)], ['With valuation', fmtNum(stats.priced)], ['Sales', fmtNum(stats.sales)], ['Active listings', fmtNum(stats.listings)], ['Median RIV', stats.medianRivUsd != null ? fmtMoney(stats.medianRivUsd) : '—'], ['Top RIV', stats.maxRivUsd != null ? fmtMoney(stats.maxRivUsd) : '—'], ['Last sale', stats.lastSaleAt ? fmtRelative(stats.lastSaleAt) : '—'], ].map(([k, v]) => (
))}
{stats.sumRivUsd != null && stats.priced === stats.assets && stats.assets > 0 ?

Sum of RIV across all {stats.assets} priced assets: {fmtMoney(stats.sumRivUsd)} (a complete-set value indication, not a market cap).

: null}
}>
); }